package com.pan.alg.niuke.searchsort;

/**
 * 描述
 * 给定一个长度为n的数组nums，请你找到峰值并返回其索引。数组可能包含多个峰值，在这种情况下，返回任何一个所在位置即可。
 * 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
 * 2.假设 nums[-1] = nums[n] = -\infty−∞
 * 3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
 * 4.你可以使用O(logN)的时间复杂度实现此问题吗？
 *
 * 数据范围：
 * 1 \le nums.length \le 2\times 10^5 \1≤nums.length≤2×10
 * 5
 *
 * -2^{31}<= nums[i] <= 2^{31} - 1−2
 * 31
 *  <=nums[i]<=2
 * 31
 *  −1
 *
 * 如输入[2,4,1,2,7,8,4]时，会形成两个山峰，一个是索引为1，峰值为4的山峰，另一个是索引为5，峰值为8的山峰，如下图所示：
 *
 */
public class ArrFindPeakElement {

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public static int findPeakElement (int[] nums) {
        // write code here
        if(nums.length==1){
            return 0;
        }
        if(nums[0]>nums[1]){
            return 0;
        }
        if(nums[nums.length-1]>nums[nums.length-2]){
            return nums.length-1;
        }

        int montainIndex = 0;
        for (int i = 0; i < nums.length-2; i++) {
            int left = nums[i];
            int middle = nums[i+1];
            int right = nums[i+2];
            if(middle>left&&middle>right){
                montainIndex= i+1;
                break;
            }
        }
        return montainIndex;
    }

    public static void main(String[] args) {
        int arr[] = {1,2,3,4,6,5};
        int arr2[] = {6,5,4,3,2,1};
        int peakElement = findPeakElement(arr);
        System.out.println(peakElement);

    }
}
